#include "public.h"







void RF433_CMD1( void )  
{
  u8 i;
//====================处理数据 =========================================== 

  switch( uarter1.Rxdate1_Handle_status )//接收到的数组处理状态  
  {   
    case 0:         //不需要处理或处理结束了
      {
//----------------------相对命令-------------------------------------  
        
//---------------------发送数据赋值并使能发送------------------------           
         
        break;
       }    
    case 1:         //待处理
      {

        switch( uarter1.Rxdate1_result[2] )//控制类型  
        {   
          case 0:         //不需要处理或处理结束了
            {    
              break;
             }    
          case 1:         //-----------------------------------------------------修改sn号
            {
  //----------------------相对命令------------------------------------- 
              
              for(i=0;i<10;i++)
              {
                 gc.PRODUCT_SN_string[i]= uarter1.Rxdate1_result[i+4] ;//更新sn
              }
              
              gc.WriteData_cmd =1;//保存到Flash 
              
              uarter1.Rxdate1_Handle_status=0;//处理完毕
              
  //---------------------发送数据赋值并使能发送------------------------            

              break;
             }
            
          case 2:         //查询sn号
            {
  //----------------------相对命令-------------------------------------            

              
                uarter1.TxBuffer1[0]= PACKET_SEND_HEADER_1;
                uarter1.TxBuffer1[1]= PACKET_SEND_HEADER_2;
                uarter1.TxBuffer1[2]= 0X81;  //回复sn序列号           
                uarter1.TxBuffer1[3]= 12;  //回复sn序列号               
                for(i=0;i<10;i++)
                {
                uarter1.TxBuffer1[i+4]=gc.PRODUCT_SN_string[i];//缓存赋值     
                }         

                uarter1.TxBuffer1[14]= 12;  //CRC16              
                uarter1.TxBuffer1[15]= 12;  //CRC16      
               
                uarter1.Tx1_gap_time=0; //发送数据的间隔时间  清零               
                uarter1.Tx1_enable=1; //发送置1
                uarter1.Tx1_standard=1;//0非标协议1标准协议
                
                uarter1.Rxdate1_Handle_status=0;//处理完毕

  //---------------------发送数据赋值并使能发送------------------------            

              break;
             }
            


          default:
            uarter1.Rxdate1_Handle_status=0;
            break;
        }

        break;
       }
      
    case 2:         //处理阶段
      {
//----------------------相对命令-------------------------------------            
        
        
        
//---------------------发送数据赋值并使能发送------------------------            

        break;
       }
      


    default:
      uarter1.Rxdate1_Handle_status=0;
      break;
  }

}











#include "main.h"
 
#include "public.h"



//void soft_433_count();//接受码计数函数
//void soft_decode();//接受码处理函数


//
////===================== 卷闸门遥控器3字节==================10ms 350us 900us============= 
//
//#define start_time_min    8000//同步信号的低电平持续时间，最低值8ms  
//#define start_time_max    12000//同步信号的低电平持续时间，最高值14ms
//#define num0_time_min    750//数据0，低电平信号持续时间，最低值500us
//#define num0_time_max    1300//数据0，低电平信号持续时间，最高值1000us
//#define num1_time_min    200//数据1，低电平信号持续时间，最低值100us
//#define num1_time_max    500//数据1，低电平信号持续时间，最高值400us 



//===================== 木纹遥控器3字节======================11ms 400us 1000us========= 

#define start_time_min    8000//同步信号的低电平持续时间，最低值11ms
#define start_time_max    15000//同步信号的低电平持续时间，最高值14ms
#define num0_time_min    750//数据0，低电平信号持续时间，最低值500us
#define num0_time_max    1400//数据0，低电平信号持续时间，最高值1000us
#define num1_time_min    250//数据1，低电平信号持续时间，最低值100us
#define num1_time_max    550//数据1，低电平信号持续时间，最高值400us 


////===================== 青花瓷呼叫器4字节========================5ms 150us 750us===== 
//
//#define start_time_min    8000//同步信号的低电平持续时间，最低值5ms
//#define start_time_max    25000//同步信号的低电平持续时间，最高值14ms
//#define num0_time_min    1500//数据0，低电平信号持续时间，最低值500us
//#define num0_time_max    2200//数据0，低电平信号持续时间，最高值1000us
//#define num1_time_min    400//数据1，低电平信号持续时间，最低值100us
//#define num1_time_max    900//数据1，低电平信号持续时间，最高值400us 








#define start_us_min    start_time_min/50//同步信号的低电平持续时间，最低值5ms
#define start_us_max    start_time_max/50//同步信号的低电平持续时间，最高值14ms
#define num0_us_min    num0_time_min/50//数据0，低电平信号持续时间，最低值500us
#define num0_us_max    num0_time_max/50//数据0，低电平信号持续时间，最高值1000us
#define num1_us_min    num1_time_min/50//数据1，低电平信号持续时间，最低值100us
#define num1_us_max    num1_time_max/50//数据1，低电平信号持续时间，最高值400us   
  

#define Dat_GPIO_Port   GPIOC
#define Dat_Pin         GPIO_Pin_14
#define RF_Dat     GPIO_ReadInputDataBit( Dat_GPIO_Port, Dat_Pin  ) 


#define date_length     8   //数据长度字节数  


//=============需要全局声明==============
 u8 RF433_date_ok_F;            //接收数据有效标志
 u8 RF433_date[date_length];    //接收数据
 u8 RF433_date_old[date_length];    //前一次接收到的数据

//=======================================



void soft_433_count()//50us进来一次_接受码计数函数
{
  




  
  static u8 bit=0;        //移动存储引脚状态        
  static u16 low;       //低电平计时 
  static u16 high;      //高电平计时  
  
//  static u8 start_F;    //开始标志
  
  static u8 bit_cnt;    //位计数 
  static u8 BYTE_index;    //字节指针
  static u8 RFdate_buf[date_length+1];    //数据缓存区10个字节
  


    u8 temp1;           
    u8 i; 
          
          
          
//--------------移动存储引脚状态----------------------          
    temp1=RF_Dat;
    bit=bit<<1;    
    if(temp1!=0)
    {
      bit|=0x01;
    }
    

    
//--------------按状态执行----------------------      
    bit &=0x07; 
  switch (bit)
  {
    case 0x00:  /*  */
     low++;
      break;
    case 0x04:  /*  */
      low=2;
      break;
    case 0x07:  /*  */
      high++;    
      break;
    case 0x03:  /*  */
      
      
// //----------------测试协议用-------------------------------     
//   static u8 test_index=0;        //测试         
//        gc.s16temp111[test_index]=low;
//        test_index++;
//        if(test_index>=50)
//        {
//          test_index=49;
//        }     
//      
// //-----------------------------------------------------------         

      
      high=2;    

        if(low>start_us_min && low<start_us_max)//读到帧头
        {
          bit_cnt=0;
          BYTE_index=0;
          
          if(RFdate_buf[6]==0&&RFdate_buf[7]==0)//4位码 
          {
             for(i=0;i<date_length;i++)
            {
              RF433_date[i]=RFdate_buf[i];         
            } 
            RF433_date_ok_F=1;//4位码         
          }
          else
          {
             for(i=0;i<date_length;i++)
            {
              RF433_date[i]=RFdate_buf[i];         
            } 
            RF433_date_ok_F=2;//8位码             
          }

          for(i=0;i<date_length;i++)//读到帧头清空存储
          {
            RFdate_buf[i]=0;         
          }

          break;          
        }

        else if(low>num1_us_min && low<num1_us_max)
        {
          RFdate_buf[BYTE_index]|=0x01;
          
        }
        else if(low>num0_us_min && low<num0_us_max)
        {
          RFdate_buf[BYTE_index]&=0xFE;
        }


        bit_cnt++;
        if(bit_cnt<8)//当前字节还未存满8位
        {
          RFdate_buf[BYTE_index]=RFdate_buf[BYTE_index]<<1;
          break;                
        }
        else//当前字节已经存满8位
        {
          bit_cnt=0;
          BYTE_index++;
          if(BYTE_index<date_length)//接收到数据长度还不够
          {
            break;               
          }          
          else//已经接收到额定长度数据包
          { 
            BYTE_index=0; 
            BYTE_index=date_length-1;
            
            break;                   

          } 

        }

             
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
//      high=2;    
//      if(start_F==0) //未接收到开始位
//      {
//        if(low>start_us_min && low<start_us_max)
//        {
//          bit_cnt=0;
//          BYTE_index=0;
//          
////          for(i=0;i<date_length;i++)
////          {
////            RFdate_buf[i]=0;         
////          }
//          for(i=0;i<8;i++)
//          {
//            RFdate_buf[i]=0;         
//          }          
//
//          start_F=1;//接收到开始位
//          
//          break;          
//        }
//        else
//        {
//          break;
//        }        
//      }
//      
//      
//      
////---------------------接收到开始位------------------------------     
//
//      else  //接收到开始位
//      {
//        
//        
////  static u8 test_index=0;        //测试         
////        gc.s16temp111[test_index]=low;
////        test_index++;
////        if(test_index>=50)
////        {
////          test_index=49;
////        }
//        
//        
//        if(low>num1_us_min && low<num1_us_max)
//        {
//          RFdate_buf[BYTE_index]|=0x01;
//        }
//        else if(low>num0_us_min && low<num0_us_max)
//        {
//          RFdate_buf[BYTE_index]&=0xFE;
//        }
//        else
//        {
//          break;
//        }  
//
//        bit_cnt++;
//        if(bit_cnt<8)//当前字节还未存满8位
//        {
//          RFdate_buf[BYTE_index]=RFdate_buf[BYTE_index]<<1;
//          break;                
//        }
//        else//当前字节已经存满8位
//        {
//          bit_cnt=0;
//          BYTE_index++;
//          if(BYTE_index<date_length)//接收到数据长度还不够
//          {
//            break;               
//          }          
//          else//已经接收到额定长度数据包
//          { 
//            BYTE_index=0; 
//            
//            for(i=0;i<date_length;i++)
//            {
//              RF433_date[i]=RFdate_buf[i];         
//            } 
//            
//            start_F=0;
//
//            RF433_date_ok_F=1;//接收到数据,可以处理了
//            
//            break;                   
//
//          } 
//
//        }
//
//        
        
        
        
        
        
        


      break;
    default:
      
      break;
  }
}




void RF433_Handler()//1ms进来一次 接受码处理函数
{
static  u16 u16key_time; //433按键持续时间    
  
  u8 i;
  u8 date_equally;   //两次数据相同标志  
  
  if ( gc.RF433_ms_cnt<1 )//1ms
  {  return; }
  gc.RF433_ms_cnt=0;
  
  
  if(RF433_date_ok_F==1 )//有接收到终端4位数据
  {
      RF433_date_ok_F=0;
      date_equally=1;      
      for(i=0;i<date_length;i++)
      {
        if(RF433_date[i]!=RF433_date_old[i])
        {
          date_equally=0;
        }
      }
      if(date_equally==0)//与前一个数据不同
      {
        u16key_time=0; //433按键持续时间 清零 
//          cmd1;        
      }
      else
      {
        u16key_time++;
        if(u16key_time==2)
        {
;//          RF433_CMD1();//执行命令
        }
        else if(u16key_time==2500)
        {
          ;
//          cmd2;
        }        
        else if(u16key_time>=5000)
        {
          u16key_time=5000;
//          cmd3;
        } 
      }
      
      for(i=0;i<date_length;i++)//更新旧数据
      {
        RF433_date_old[i]=RF433_date[i];
      }      

  }
  
  
  else if (RF433_date_ok_F==2 )//有接收到路由8位数据
  {
    ;  
  }  
  else //没有接收到数据
  {
    ;  
  }
}  




































